package com.ruoyi.blog.service.impl;

import java.util.ArrayList;
import java.util.List;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.blog.domain.BlogArticle;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.blog.mapper.BlogTypeMapper;
import com.ruoyi.blog.domain.BlogType;
import com.ruoyi.blog.service.IBlogTypeService;

/**
 * 博客分类Service业务层处理
 * 
 * @author ruoyi
 * @date 2021-05-05
 */
@Service
public class BlogTypeServiceImpl implements IBlogTypeService 
{
    @Autowired(required = false)
    private BlogTypeMapper blogTypeMapper;

    /**
     * 查询博客分类
     * 
     * @param id 博客分类ID
     * @return 博客分类
     */
    @Override
    public BlogType selectBlogTypeById(Long id)
    {
        return blogTypeMapper.selectBlogTypeById(id);
    }

    /**
     * 查询博客分类列表
     * 
     * @param blogType 博客分类
     * @return 博客分类
     */
    @Override
    public List<BlogType> selectBlogTypeList(BlogType blogType)
    {
        return blogTypeMapper.selectBlogTypeList(blogType);
    }

    /**
     * 新增博客分类
     * 
     * @param blogType 博客分类
     * @return 结果
     */
    @Override
    public int insertBlogType(BlogType blogType)
    {
        blogType.setCreateTime(DateUtils.getNowDate());
        return blogTypeMapper.insertBlogType(blogType);
    }

    /**
     * 修改博客分类
     * 
     * @param blogType 博客分类
     * @return 结果
     */
    @Override
    public int updateBlogType(BlogType blogType)
    {
        return blogTypeMapper.updateBlogType(blogType);
    }

    /**
     * 批量删除博客分类
     * 
     * @param ids 需要删除的博客分类ID
     * @return 结果
     */
    @Override
    public int deleteBlogTypeByIds(Long[] ids)
    {
        return blogTypeMapper.deleteBlogTypeByIds(ids);
    }

    /**
     * 删除博客分类信息
     * 
     * @param id 博客分类ID
     * @return 结果
     */
    @Override
    public int deleteBlogTypeById(Long id)
    {
        return blogTypeMapper.deleteBlogTypeById(id);
    }

    /**
     * 将分类以Tree格式进行存放children返回
     * @return
     */
    @Override
    public List<BlogType> getTreeTypeList() {
        // 获取所有的父级
        List<BlogType> parentList = blogTypeMapper.selectParentList();
        // 获取所有数据
        List<BlogType> blogTypeList = blogTypeMapper.selectBlogTypeList(null);
        for (BlogType blogType : parentList) {
            blogType.setChildren(tree(blogTypeList, blogType.getId().intValue()) );
        }
        return parentList;
    }

    public BlogType getTypeInfoByName(String name) {
        return blogTypeMapper.selectOne(new QueryWrapper<BlogType>().eq("name", name) );
    }

    private List<BlogType> tree(List<BlogType> list, Integer rootId) {
        List<BlogType> newList = new ArrayList<>();
        for (BlogType type: list){
            if (type.getParentId() == rootId.intValue()){
                List<BlogType> tempList = tree(list, type.getId().intValue() );
                type.setChildren(tempList);
                newList.add(type);
            }
        }
        return newList;
    }
}
